package com.nicolas.pattern.state.share;

/**
 * Context（环境类）
 * @author nicolas  2017年2月13日 -- 下午8:54:41
 */
public class Switch {
	private static State state,onState,offState; //定义三个静态的状态对象  
    private String name;  
      
    public Switch(String name) {  
        this.name = name;  
        onState = new OnState();  
        offState = new OffState();  
        this.state = onState;  
    }  
  
    public void setState(State state) {  
        this.state = state;  
    }  
  
    /**
     * 在有些情况下，多个环境对象可能需要共享同一个状态，
     * 如果希望在系统中实现多个环境对象共享一个或多个状态对象，
     * 那么需要将这些状态对象定义为环境类的静态成员对象。
     * @param type
     * @return
     */
    public static State getState(String type) {  
        if (type.equalsIgnoreCase("on")) {  
            return onState;  
        }  
        else {  
            return offState;  
        }  
    }  
          
    //打开开关  
    public void on() {  
        System.out.print(name);  
        state.on(this);  
    }  
      
//关闭开关  
    public void off() {  
        System.out.print(name);  
        state.off(this);  
    }  
}
